Factor Model Estimator#
Factor Model impose a structure on asset’s covariance matrix by using factors to explain their relationships.
Reduce the dimensionality of estimation.
Robust against noise
Decompose risk into systematic and idiosyncratic components
Data#
Use 5 ETF’s daily prices as common factors.
from plotly.io import show
from sklearn.linear_model import RidgeCV
from sklearn.model_selection import train_test_split
from skfolio import Population, RiskMeasure
from skfolio.datasets import load_factors_dataset, load_sp500_dataset
from skfolio.moments import GerberCovariance, ShrunkMu
from skfolio.optimization import MeanRisk, ObjectiveFunction
from skfolio.preprocessing import prices_to_returns
from skfolio.prior import EmpiricalPrior, FactorModel, LoadingMatrixRegression
prices = load_sp500_dataset()
factor_prices = load_factors_dataset()
X, y = prices_to_returns(prices, factor_prices)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, shuffle=False)
X_train.head()
| AAPL | AMD | BAC | BBY | CVX | GE | HD | JNJ | JPM | KO | LLY | MRK | MSFT | PEP | PFE | PG | RRC | UNH | WMT | XOM | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Date | ||||||||||||||||||||
| 2014-01-03 | -0.021941 | 0.012658 | 0.019298 | 0.004423 | 0.001694 | -0.000724 | -0.001591 | 0.009005 | 0.007727 | -0.004921 | 0.007290 | 0.004831 | -0.006747 | 0.001696 | 0.001976 | -0.001119 | -0.014801 | 0.007104 | -0.003300 | -0.002409 |
| 2014-01-06 | 0.005417 | 0.032500 | 0.015233 | -0.031223 | -0.002663 | -0.008007 | -0.009639 | 0.005223 | 0.005801 | -0.004678 | 0.008424 | 0.000198 | -0.021116 | 0.000495 | 0.000986 | 0.002372 | 0.006461 | -0.011444 | -0.005591 | 0.001503 |
| 2014-01-07 | -0.007145 | 0.012107 | -0.009646 | -0.026135 | 0.008466 | 0.001096 | 0.004920 | 0.021230 | -0.011535 | 0.002954 | -0.006601 | 0.007464 | 0.007758 | 0.014579 | 0.006206 | 0.009661 | 0.017028 | 0.030569 | 0.003078 | 0.014147 |
| 2014-01-08 | 0.006311 | 0.000000 | 0.004834 | -0.014072 | -0.014226 | -0.002926 | 0.005277 | -0.001371 | 0.009434 | -0.011147 | -0.001571 | -0.006399 | -0.017865 | -0.002880 | 0.006853 | -0.014483 | 0.001090 | -0.011626 | -0.007907 | -0.003259 |
| 2014-01-09 | -0.012719 | -0.021531 | 0.015078 | -0.008176 | 0.000000 | 0.000366 | -0.004385 | 0.006056 | -0.001860 | -0.005247 | 0.011157 | -0.005423 | -0.006449 | -0.004688 | -0.000681 | 0.002246 | -0.015635 | 0.006088 | 0.003346 | -0.009735 |
y_train.head()
| MTUM | QUAL | SIZE | USMV | VLUE | |
|---|---|---|---|---|---|
| Date | |||||
| 2014-01-03 | 0.001670 | -0.001965 | -0.005389 | -0.000273 | -0.001169 |
| 2014-01-06 | -0.002178 | -0.003917 | 0.000000 | -0.002284 | -0.000170 |
| 2014-01-07 | 0.008258 | 0.008072 | 0.000185 | 0.005707 | 0.005576 |
| 2014-01-08 | 0.007343 | -0.000371 | 0.000000 | -0.000272 | 0.000000 |
| 2014-01-09 | 0.001832 | -0.000537 | -0.002093 | 0.001428 | -0.002180 |
Model#
max_sharpe_model_factor_1 = MeanRisk(
risk_measure=RiskMeasure.VARIANCE,
objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
prior_estimator=FactorModel(),
portfolio_params=dict(name="Factor Model 1")
)
max_sharpe_model_factor_1.fit(X_train, y_train)
max_sharpe_model_factor_1.weights_
array([1.03294289e-06, 1.27482685e-03, 4.19682803e-07, 3.34130825e-06,
7.36838286e-07, 1.28824408e-06, 5.13031432e-02, 6.35619183e-02,
6.14804833e-07, 1.79106051e-01, 5.03130911e-02, 7.13734379e-02,
4.13002526e-02, 2.27978407e-01, 5.13348034e-02, 1.44130375e-01,
2.99026116e-07, 6.19737850e-02, 5.63413085e-02, 8.67773196e-07])
max_sharpe_model_factor_2 = MeanRisk(
risk_measure=RiskMeasure.VARIANCE,
objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
prior_estimator=FactorModel(
loading_matrix_estimator=LoadingMatrixRegression(
linear_regressor=RidgeCV(fit_intercept=False), n_jobs=-1
)
),
portfolio_params=dict(name="Factor Model 2")
)
max_sharpe_model_factor_2.fit(X_train, y_train)
max_sharpe_model_factor_2.weights_
array([3.97758339e-02, 6.57843874e-03, 2.18405141e-02, 8.98258882e-03,
3.16197378e-02, 1.42391168e-02, 8.00124906e-02, 8.32090802e-02,
4.74782930e-02, 8.59470407e-02, 4.59776221e-02, 5.91778878e-02,
8.42236770e-02, 1.05684777e-01, 6.43841778e-02, 7.94729901e-02,
3.76786711e-05, 5.23695742e-02, 4.35215146e-02, 4.54669667e-02])
Empirical prior estimator of factors.
max_sharpe_model_factor_3 = MeanRisk(
risk_measure=RiskMeasure.VARIANCE,
objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
prior_estimator=FactorModel(
factor_prior_estimator=EmpiricalPrior(
mu_estimator=ShrunkMu(), covariance_estimator=GerberCovariance()
)
),
portfolio_params=dict(name="Factor Model 3")
)
max_sharpe_model_factor_3.fit(X_train, y_train)
max_sharpe_model_factor_3.weights_
array([4.86490688e-07, 4.38230191e-07, 4.24408219e-08, 6.69653310e-08,
5.11878211e-08, 6.14581598e-08, 1.68436387e-02, 2.08439608e-06,
5.27854151e-08, 6.45513596e-02, 6.24004728e-02, 9.61498232e-02,
3.68209826e-01, 2.44692220e-01, 5.86512134e-07, 9.30385158e-06,
2.19939734e-08, 1.47139096e-01, 3.09340377e-07, 5.81316429e-08])
prior_estimator = max_sharpe_model_factor_3.prior_estimator_
prior_estimator
FactorModel(factor_prior_estimator=EmpiricalPrior(covariance_estimator=GerberCovariance(),
mu_estimator=ShrunkMu()))In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
FactorModel(factor_prior_estimator=EmpiricalPrior(covariance_estimator=GerberCovariance(),
mu_estimator=ShrunkMu()))EmpiricalPrior(covariance_estimator=GerberCovariance(), mu_estimator=ShrunkMu())
GerberCovariance()
GerberCovariance()
ShrunkMu()
ShrunkMu()
prior_model = prior_estimator.prior_model_
prior_model
PriorModel(mu=array([ 0.00059752, 0.00078836, -0.00053323, -0.00012697, -0.00033297,
-0.00021685, 0.00061879, 0.00054947, -0.00029846, 0.00050157,
0.00068264, 0.00069036, 0.00125097, 0.00065547, 0.00045871,
0.00049221, -0.00175945, 0.00081062, 0.00033362, -0.00023231]), covariance=array([[ 2.75022074e-04, 1.29310397e-04, 1.14094740e-04,
6.75191637e-05, 7.20639440e-05, 7.33237546e-05,
6.16476554e-05, 4.68291134e-05, 9.48837814e-05,
-5.26599038e-06, 3.48607146e-05, 3.01473788e-05,
1.15046221e-04, 1.40148901e-07, 3.44889698e-05,
8.52261680e-07, 1.05781045e-04, 2.90934542e-05,
3.88259728e-06, 7.75978321e-05],
[ 1.29310397e-04, 1.45566967e-03, 1.55981389e-04,
1.10954429e-04, 7.64768830e-05, 8.67241392e-05,
8.08813989e-05, 3.05345368e-05, 1.21105046e-04,
-4.89395055e-06, 4.82541428e-05, 4.51634980e-05,
1.27995691e-04, -4.55732351e-06, 5.66555704e-05,
-4.09562521e-06, 1.42304632e-04, 8.63190912e-05,
2.37363066e-05, 5.57555261e-05],
[ 1.14094740e-04, 1.55981389e-04, 2.69090256e-04,
1.01689654e-04, 9.49504435e-05, 9.35432817e-05,
5.78640096e-05, 2.91954895e-05, 1.24269576e-04,
-9.08347887e-06, 2.85402761e-05, 2.47993513e-05,
8.38345197e-05, -1.06712866e-05, 4.09363935e-05,
-4.57836762e-06, 1.84647624e-04, 4.28713997e-05,
1.66612855e-05, 8.13387650e-05],
[ 6.75191637e-05, 1.10954429e-04, 1.01689654e-04,
5.21322344e-04, 7.08593403e-05, 6.81915115e-05,
4.94184022e-05, 3.16221718e-05, 8.53304343e-05,
1.60443423e-05, 3.53552203e-05, 3.36832304e-05,
6.01253120e-05, 1.57659995e-05, 4.20884042e-05,
1.87708673e-05, 1.18332703e-04, 4.69483904e-05,
3.17546971e-05, 5.96513909e-05],
[ 7.20639440e-05, 7.64768830e-05, 9.49504435e-05,
7.08593403e-05, 1.90825444e-04, 7.36024262e-05,
4.80112810e-05, 4.65744597e-05, 8.59258701e-05,
2.74723752e-05, 3.80836430e-05, 3.59814776e-05,
5.52114817e-05, 2.92016372e-05, 4.28462937e-05,
3.32346073e-05, 1.20270398e-04, 3.22112357e-05,
3.69812877e-05, 8.06298282e-05],
[ 7.33237546e-05, 8.67241392e-05, 9.35432817e-05,
6.81915115e-05, 7.36024262e-05, 3.06004528e-04,
4.61879786e-05, 3.84574483e-05, 8.15190862e-05,
1.86642816e-05, 3.38999830e-05, 3.17542249e-05,
5.74139807e-05, 1.97327963e-05, 3.81902046e-05,
2.29821149e-05, 1.14392836e-04, 3.26251338e-05,
2.89936200e-05, 6.96063575e-05],
[ 6.16476554e-05, 8.08813989e-05, 5.78640096e-05,
4.94184022e-05, 4.80112810e-05, 4.61879786e-05,
1.21041183e-04, 3.94231192e-05, 5.40731034e-05,
2.66659333e-05, 4.02859024e-05, 3.90848323e-05,
6.54442932e-05, 3.02615048e-05, 3.91432709e-05,
2.93555944e-05, 4.96897755e-05, 4.33380200e-05,
3.12123954e-05, 4.59021175e-05],
[ 4.68291134e-05, 3.05345368e-05, 2.91954895e-05,
3.16221718e-05, 4.65744597e-05, 3.84574483e-05,
3.94231192e-05, 1.08304653e-04, 3.71734414e-05,
4.18030338e-05, 4.14191985e-05, 4.05650429e-05,
4.93432671e-05, 4.73678463e-05, 3.65906540e-05,
4.62952095e-05, 2.45801578e-05, 2.81081500e-05,
3.71767797e-05, 5.28333969e-05],
[ 9.48837814e-05, 1.21105046e-04, 1.24269576e-04,
8.53304343e-05, 8.59258701e-05, 8.15190862e-05,
5.40731034e-05, 3.71734414e-05, 1.70717343e-04,
8.07713480e-06, 3.39471416e-05, 3.10414132e-05,
7.34839631e-05, 8.39736851e-06, 4.19903070e-05,
1.28630070e-05, 1.46159436e-04, 4.00187093e-05,
2.57013528e-05, 7.74224660e-05],
[-5.26599038e-06, -4.89395055e-06, -9.08347887e-06,
1.60443423e-05, 2.74723752e-05, 1.86642816e-05,
2.66659333e-05, 4.18030338e-05, 8.07713480e-06,
1.05253169e-04, 4.06544494e-05, 4.18397599e-05,
1.49114467e-05, 6.14701296e-05, 3.46402138e-05,
5.93790744e-05, -1.13617568e-05, 3.05904270e-05,
4.86306807e-05, 3.06495654e-05],
[ 3.48607146e-05, 4.82541428e-05, 2.85402761e-05,
3.53552203e-05, 3.80836430e-05, 3.38999830e-05,
4.02859024e-05, 4.14191985e-05, 3.39471416e-05,
4.06544494e-05, 1.75693820e-04, 4.21282005e-05,
4.77174524e-05, 4.48074434e-05, 3.85539582e-05,
4.29237546e-05, 1.92926406e-05, 4.08145780e-05,
3.93913623e-05, 3.81468082e-05],
[ 3.01473788e-05, 4.51634980e-05, 2.47993513e-05,
3.36832304e-05, 3.59814776e-05, 3.17542249e-05,
3.90848323e-05, 4.05650429e-05, 3.10414132e-05,
4.18397599e-05, 4.21282005e-05, 1.42043162e-04,
4.48571748e-05, 4.59019476e-05, 3.83176610e-05,
4.38899693e-05, 1.51241945e-05, 4.11898710e-05,
4.02710437e-05, 3.57024723e-05],
[ 1.15046221e-04, 1.27995691e-04, 8.38345197e-05,
6.01253120e-05, 5.52114817e-05, 5.74139807e-05,
6.54442932e-05, 4.93432671e-05, 7.34839631e-05,
1.49114467e-05, 4.77174524e-05, 4.48571748e-05,
2.02142203e-04, 2.15162449e-05, 4.49078328e-05,
1.90049852e-05, 5.37436081e-05, 5.30950647e-05,
2.18979823e-05, 5.59398694e-05],
[ 1.40148901e-07, -4.55732351e-06, -1.06712866e-05,
1.57659995e-05, 2.92016372e-05, 1.97327963e-05,
3.02615048e-05, 4.73678463e-05, 8.39736851e-06,
6.14701296e-05, 4.48074434e-05, 4.59019476e-05,
2.15162449e-05, 1.07625755e-04, 3.75343952e-05,
6.40286709e-05, -1.72798120e-05, 3.26763167e-05,
5.12581307e-05, 3.40666183e-05],
[ 3.44889698e-05, 5.66555704e-05, 4.09363935e-05,
4.20884042e-05, 4.28462937e-05, 3.81902046e-05,
3.91432709e-05, 3.65906540e-05, 4.19903070e-05,
3.46402138e-05, 3.85539582e-05, 3.83176610e-05,
4.49078328e-05, 3.75343952e-05, 1.15877589e-04,
3.69584016e-05, 3.68692997e-05, 4.17271572e-05,
3.79004402e-05, 3.90792631e-05],
[ 8.52261680e-07, -4.09562521e-06, -4.57836762e-06,
1.87708673e-05, 3.32346073e-05, 2.29821149e-05,
2.93555944e-05, 4.62952095e-05, 1.28630070e-05,
5.93790744e-05, 4.29237546e-05, 4.38899693e-05,
1.90049852e-05, 6.40286709e-05, 3.69584016e-05,
1.15957585e-04, -6.14105349e-06, 3.06567550e-05,
5.05747377e-05, 3.73325252e-05],
[ 1.05781045e-04, 1.42304632e-04, 1.84647624e-04,
1.18332703e-04, 1.20270398e-04, 1.14392836e-04,
4.96897755e-05, 2.45801578e-05, 1.46159436e-04,
-1.13617568e-05, 1.92926406e-05, 1.51241945e-05,
5.37436081e-05, -1.72798120e-05, 3.68692997e-05,
-6.14105349e-06, 1.13240765e-03, 2.49017180e-05,
1.78092500e-05, 1.05120734e-04],
[ 2.90934542e-05, 8.63190912e-05, 4.28713997e-05,
4.69483904e-05, 3.22112357e-05, 3.26251338e-05,
4.33380200e-05, 2.81081500e-05, 4.00187093e-05,
3.05904270e-05, 4.08145780e-05, 4.11898710e-05,
5.30950647e-05, 3.26763167e-05, 4.17271572e-05,
3.06567550e-05, 2.49017180e-05, 1.76762783e-04,
3.88397853e-05, 2.09515222e-05],
[ 3.88259728e-06, 2.37363066e-05, 1.66612855e-05,
3.17546971e-05, 3.69812877e-05, 2.89936200e-05,
3.12123954e-05, 3.71767797e-05, 2.57013528e-05,
4.86306807e-05, 3.93913623e-05, 4.02710437e-05,
2.18979823e-05, 5.12581307e-05, 3.79004402e-05,
5.05747377e-05, 1.78092500e-05, 3.88397853e-05,
1.49113824e-04, 3.37187088e-05],
[ 7.75978321e-05, 5.57555261e-05, 8.13387650e-05,
5.96513909e-05, 8.06298282e-05, 6.96063575e-05,
4.59021175e-05, 5.28333969e-05, 7.74224660e-05,
3.06495654e-05, 3.81468082e-05, 3.57024723e-05,
5.59398694e-05, 3.40666183e-05, 3.90792631e-05,
3.73325252e-05, 1.05120734e-04, 2.09515222e-05,
3.37187088e-05, 1.59523910e-04]]), returns=array([[-0.00199817, -0.00042477, -0.00237797, ..., 0.00139911,
-0.00020712, -0.00320953],
[-0.00472448, -0.00080819, -0.00096952, ..., -0.00095927,
-0.00169727, -0.00375446],
[ 0.01005251, 0.01010583, 0.00749449, ..., 0.00651126,
0.00495531, 0.00725569],
...,
[ 0.00601832, 0.00745974, 0.00385279, ..., 0.00294314,
0.00077309, 0.00209029],
[ 0.0095716 , 0.00791312, 0.00261701, ..., 0.00535552,
0.00408997, 0.00540137],
[-0.00155016, -0.00451996, -0.00553801, ..., -0.001108 ,
-0.00101758, -0.00272778]]), cholesky=array([[ 0.0076512 , 0.00791537, -0.00124936, -0.00473785, 0. ,
0.01139386, 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.01267863, 0.00230907, 0.0028551 , -0.00371341, 0.00608266,
0. , 0.03508063, 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00584882, 0.00659974, 0.00153833, -0.00401594, 0.00777328,
0. , 0. , 0.01060222, 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00493489, 0.00423128, 0.00218133, 0.00021223, 0.00545429,
0. , 0. , 0. , 0.02108348, 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00282127, 0.00729264, 0.00056355, 0.00138079, 0.00450236,
0. , 0. , 0. , 0. , 0.01035316,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00355227, 0.00615007, 0.00144922, 0.00015299, 0.00393178,
0. , 0. , 0. , 0. , 0. ,
0.0154266 , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00559007, 0.00344247, 0.00063832, 0.00159862, 0.00101467,
0. , 0. , 0. , 0. , 0. ,
0. , 0.00859937, 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00311079, 0.00503293, -0.00062074, 0.00371165, -0.00081746,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.00764639, 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00492347, 0.00650322, 0.00102714, -0.00148195, 0.0057919 ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.008209 , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00137125, 0.00233393, 0.00105064, 0.00694809, -0.0008002 ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.00692138,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00428975, 0.00275223, 0.00077908, 0.00396225, 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0.01155036, 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.0041721 , 0.00245088, 0.00083541, 0.00424877, 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0.009994 , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00948544, 0.00450157, -0.00134661, -0.00108852, -0.00046996,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.00941729, 0. , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00182792, 0.00272511, 0.00057269, 0.00732407, -0.00139136,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.0063994 , 0. ,
0. , 0. , 0. , 0. , 0. ],
[ 0.00407386, 0.00256053, 0.00053825, 0.00343532, 0.00169533,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.00881814,
0. , 0. , 0. , 0. , 0. ],
[ 0.00140164, 0.00307377, 0.00057097, 0.00706833, -0.0007146 ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0.00733123, 0. , 0. , 0. , 0. ],
[ 0.00180274, 0.00957744, 0.00477689, -0.0046745 , 0.01090585,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0.0295605 , 0. , 0. , 0. ],
[ 0.00641985, -0.00034107, 0.00103944, 0.00338291, 0.00251636,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.01079701, 0. , 0. ],
[ 0.00225012, 0.00201069, 0.00096232, 0.00591969, 0.00161108,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.01007192, 0. ],
[ 0.00210995, 0.00859385, 0.00018985, 0.00133649, 0.00223279,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.00862613]]))
loading_matrix = prior_estimator.loading_matrix_estimator_.loading_matrix_
loading_matrix
array([[ 0.34905954, 1.59051502, -0.05077361, -0.99167193, -0. ],
[ 1.16592858, 0. , 0.28177423, -0.82678691, 0.92261137],
[ 0.06342149, 0.68820926, -0. , -0.90387695, 1.17904377],
[ 0. , 0.19084808, 0.08086552, -0. , 0.82730174],
[-0.51036765, 0.78697298, -0.16877212, 0.25234305, 0.6829133 ],
[-0.28101136, 0.64151033, 0.03860762, -0. , 0.59636878],
[ 0.17691041, 0.36515599, 0.00321386, 0.32634051, 0.15390387],
[-0.278366 , 0.70692514, -0.17666442, 0.78353708, -0.12399197],
[-0.10659571, 0.69754112, -0.06647323, -0.35735584, 0.8785099 ],
[-0.41056254, -0.00260142, -0.01212348, 1.46081088, -0.12137341],
[ 0. , 0.18620599, -0. , 0.82933288, -0. ],
[-0. , 0.11966633, 0. , 0.88930418, 0. ],
[ 0.69202998, 0.89393433, -0.15846805, -0.22400802, -0.07128371],
[-0.3957795 , 0.10853663, -0.07201061, 1.54432198, -0.21104045],
[ 0. , 0.09651092, -0.10304305, 0.70523413, 0.25714621],
[-0.47097164, 0.13667695, -0.09663336, 1.48528068, -0.10839054],
[-0.73003654, 0.79154733, 0.38823075, -1.0672316 , 1.65418823],
[ 0.49477073, -0.44787587, -0.06060629, 0.68757756, 0.38167972],
[-0.27169002, -0.14117267, -0.1093039 , 1.22591944, 0.2443677 ],
[-0.66103932, 1.15899118, -0.1184898 , 0.2615538 , 0.33866742]])
benchmark_model = MeanRisk(
risk_measure=RiskMeasure.VARIANCE,
objective_function=ObjectiveFunction.MAXIMIZE_RATIO,
portfolio_params=dict(name="Empirical")
)
benchmark_model.fit(X_train)
benchmark_model.weights_
array([1.01561518e-01, 7.81165193e-02, 6.29030036e-07, 1.89005488e-02,
3.05610119e-07, 1.55770502e-07, 1.10594710e-01, 1.22328443e-06,
1.56471742e-06, 3.39453276e-06, 1.62631058e-01, 1.92171374e-06,
1.77783711e-01, 9.61805760e-02, 4.64493062e-07, 9.68566446e-03,
7.41771352e-08, 2.44533886e-01, 1.83984287e-06, 2.34178301e-07])
Prediction#
pred_factor_1 = max_sharpe_model_factor_1.predict(X_test)
pred_factor_2 = max_sharpe_model_factor_2.predict(X_test)
pred_factor_3 = max_sharpe_model_factor_3.predict(X_test)
pred_benchmark = benchmark_model.predict(X_test)
Analysis#
population = Population(
[
pred_factor_1,
pred_factor_2,
pred_factor_3,
pred_benchmark
]
)
population.plot_cumulative_returns()
population.plot_composition()